<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8" />
	<title>列表过滤</title>
	<script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
	<!-- 准备好一个容器-->
	<div id="root">
		<h2>人员列表</h2>
		<!-- 1.获取用户输入的字符串 -->
		<input type="text" placeholder="请输入名字" v-model="keyWord">
		<ul>
			<!-- 遍历的空数组 watch需要加上immediate:true, -->
			<li v-for="(p,index) of filPerons" :key="index">
				{{p.name}}-{{p.age}}-{{p.sex}}
			</li>
		</ul>
	</div>

	<script type="text/javascript">
		Vue.config.productionTip = false

		// 当用户拿到的数据发生变化时要重过滤,watch和computed

		//用watch实现(不推荐)
		//#region 
		/* new Vue({
			el:'#root',
			data:{
				keyWord:'',
				persons:[
					{id:'001',name:'马冬梅',age:19,sex:'女'},
					{id:'002',name:'周冬雨',age:20,sex:'女'},
					{id:'003',name:'周杰伦',age:21,sex:'男'},
					{id:'004',name:'温兆伦',age:22,sex:'男'}
				],
				// 存储过滤后的数据
				filPerons:[]
			},
			watch:{
				keyWord:{
					immediate:true,
					handler(val){
						// filter 过滤判断条件生成新的数组，返回值是过滤符合条件的新数组
						// 如果不使用this.filPerons = this.persons.filter,而是直接使用this.persons = this.persons.filter,每搜索一次数据都会过滤一组数据,最后搜索不正确
						this.filPerons = this.persons.filter((p)=>{
							// indexOf是否包含 -1不包含 返回名字匹配的数据
							return p.name.indexOf(val) !== -1
						})
					}
				}
			}
		}) */
		//#endregion

		//用computed实现
		new Vue({
			el: '#root',
			data: {
				keyWord: '',
				persons: [
					{ id: '001', name: '马冬梅', age: 19, sex: '女' },
					{ id: '002', name: '周冬雨', age: 20, sex: '女' },
					{ id: '003', name: '周杰伦', age: 21, sex: '男' },
					{ id: '004', name: '温兆伦', age: 22, sex: '男' }
				]
			},
			computed: {
				// 2.拿到用户输入的字符串到persons中进行过滤
				// filPerons存储过滤后的数据
				filPerons() {
					console.log('@', this);
					// return 计算属性规定的
					return this.persons.filter((p) => {
						// return filter规定的
						return p.name.indexOf(this.keyWord) !== -1
					})
				}
			}
		}) 
	</script>

</html>